配置包

一个 Configuration 包是一个OCI 容器镜像,包含Composition复合资源定义 和任何所需的 Provider函数.

配置包使你的 crossplane 配置完全可移植。

Important

crossplane ProvidersFunctions 也是 crossplane 软件包。

本文件介绍如何安装和管理配置包。

请参阅 ProviderComposition Functions 章节,详细了解它们对 packages 的用法。

安装配置

安装带 crossplane 的配置配置对象安装配置 spec.packages值设置为配置包的位置。

例如安装 upbound AWS 参考平台

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  package: xpkg.upbound.io/upbound/platform-ref-aws:v0.6.0

crossplane 会安装配置中列出的 Composition、复合资源定义和 Providers。

用 Helm 安装

Crossplane 支持在初始安装 Crossplane 时使用 Crossplane Helm 图表安装配置。

被引用--set configuration.packages参数与 helm install 一起使用。

例如,安装 upbound AWS 参考平台、

1helm install crossplane \
2crossplane-stable/crossplane \
3--namespace crossplane-system \
4--create-namespace \
5--set configuration.packages='{xpkg.upbound.io/upbound/platform-ref-aws:v0.6.0}'

离线安装

crossplane 从本地软件包缓存中安装软件包。默认情况下,crossplane 软件包缓存是一个 emptyDir volume

配置 Crossplane,使其被引用PersistentVolumeClaim,以使用包含配置镜像的存储位置。阅读Crossplane 安装文档中有关配置 Crossplane Pod 设置的更多信息。https://crossplane.devops.gold/master/software/install/#customize-the-crossplane-helm-chart).

Provider 配置的 .xpkg 文件名并设置packagePullPolicy: Never.

例如,要安装本地存储的 upbound AWS 参考平台版本,请设置package为本地文件名,并将配置的packagePullPolicy: Never.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: offline-platform-ref-aws
5spec:
6  package: platform-ref-aws
7  packagePullPolicy: Never

安装选项

配置支持多个选项来更改配置包相关设置。

配置修订

当安装现有配置的更新版本时,crossplane 会创建一个新的配置修订版。

使用以下命令查看配置修订版kubectl get configurationrevisions.

1kubectl get configurationrevisions
2NAME HEALTHY REVISION IMAGE STATE DEP-FOUND DEP-INSTALLED AGE
3platform-ref-aws-1735d56cd88d True 2 xpkg.upbound.io/upbound/platform-ref-aws:v0.5.0 Active 2 2 46s
4platform-ref-aws-3ac761211893 True 1 xpkg.upbound.io/upbound/platform-ref-aws:v0.4.1 Inactive 5m13s

每次只有一个修订处于活动状态,活动修订决定可用资源,包括 Composition 和复合资源定义。

默认情况下,crossplane 只保留一个 Inactive Revisions。

更改 Crossplane 通过配置包维护的修订次数修订历史限制.

修订历史限制 修订历史限制字段是一个整数,默认值为 “1”。 通过设置修订历史限制设置为0

例如,要更改默认设置并存储 10 个修订版本,请使用revisionHistoryLimit: 10.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  revisionHistoryLimit: 10
7# Removed for brevity

配置包拉取策略

被引用 packagePullPolicy来定义 Crossplane 应在何时将配置包下载到本地的 Crossplane 包缓存。

packagePullPolicy` 选项包括

  • IfNotPresent - (默认)只下载不在缓存中的软件包。
  • Always - 每分钟检查新软件包,并下载缓存中没有的匹配软件包。
  • Never` - 永远不下载软件包。只从本地软件包缓存中安装软件包。
Tip

crossplane拉取策略的工作原理与 Kubernetes 容器镜像 image pull policy类似。

crossplane 支持像 Kubernetes 镜像一样使用标签和包摘要散列。

例如,要 “始终 “下载给定的配置软件包,请使用packagePullPolicy: Always配置。

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  packagePullPolicy: Always
7# Removed for brevity

修订激活政策

主动 “软件包 Revisions 是主动调节资源的软件包控制器。

默认情况下,Crossplane 会将最近安装的软件包修订版设置为 “激活”。

使用修订激活策略.

修订激活策略 修订激活策略选项有

  • 自动”-(默认)自动激活上次安装的配置。
  • Manual - 不自动激活配置。

例如,要将升级行为改为要求手动升级,可设置revisionActivationPolicy: Manual.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  revisionActivationPolicy: Manual
7# Removed for brevity

从私人注册表安装配置

就像 Kubernetes 使用 “imagePullSecrets “来从私有 registry 安装镜像一样,Crossplane 也使用 “packagePullSecrets “来从私有 registry 安装配置包。

被引用 packagePullSecrets来提供一个 Kubernetes secrets,以便在下载配置包时用于身份验证。

Important
Kubernetes secret 必须与 crossplane 位于同一命名空间。

是一个secret列表。是一个secret列表。

例如,要使用名为example-secret 的secret配置一个packagePullSecrets.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  packagePullSecrets: 
7    - name: example-secret
8# Removed for brevity

忽略依赖关系

默认情况下,crossplane 会安装配置包中列出的任何 依赖项

crossplane 可以忽略配置包的依赖关系,使用skipDependencyResolution.

Warning

大多数配置包括所需 Providers 的依赖关系。

如果 “配置 “忽略了依赖关系,则必须手动安装所需的 Provider。

例如,要禁用依赖关系解析,请配置skipDependencyResolution: true.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  skipDependencyResolution: true
7# Removed for brevity

忽略 crossplane 版本要求

默认情况下,如果 Crossplane 版本不符合要求,Crossplane 不会安装配置包。

crossplane 可以使用忽略 CrossplaneConstraints.

例如,要将配置包安装到不支持的 crossplane 版本中,请配置ignoreCrossplaneConstraints: true.

1apiVersion: pkg.crossplane.io/v1
2kind: Configuration
3metadata:
4  name: platform-ref-aws
5spec:
6  ignoreCrossplaneConstraints: true
7# Removed for brevity

验证配置

使用获取配置.

工作配置将 “已安装 “和 “健康 “报告为 “真”。

1kubectl get configuration
2NAME INSTALLED HEALTHY PACKAGE AGE
3platform-ref-aws True True xpkg.upbound.io/upbound/platform-ref-aws:v0.6.0 54s

管理依赖关系

配置包可能包括对其他包(包括功能、Provider 或其他配置)的依赖。

如果 crossplane 无法满足 “配置 “的依赖关系,则 “配置 “会将 “HEALTHY “报告为 “False”。

例如,upbound AWS 参考平台的此安装为 HEALTHY: false

1kubectl get configuration
2NAME INSTALLED HEALTHY PACKAGE AGE
3platform-ref-aws True False xpkg.upbound.io/upbound/platform-ref-aws:v0.6.0 71s

要查看更多关于配置为何不 “健康 “的信息,请引用kubectl describe configurationrevisions.

 1kubectl describe configurationrevision
 2Name:         platform-ref-aws-a30ad655c769
 3API Version:  pkg.crossplane.io/v1
 4Kind:         ConfigurationRevision
 5# Removed for brevity
 6Spec:
 7  Desired State:                  Active
 8  Image:                          xpkg.upbound.io/upbound/platform-ref-aws:v0.6.0
 9  Revision:                       1
10Status:
11  Conditions:
12    Last Transition Time:  2023-10-06T20:08:14Z
13    Reason:                UnhealthyPackageRevision
14    Status:                False
15    Type:                  Healthy
16  Controller Ref:
17    Name:
18Events:
19  Type Reason Age From Message
20  ----     ------       ----               ----                                              -------
21  Warning LintPackage 29s (x2 over 29s)  packages/configurationrevision.pkg.crossplane.io incompatible Crossplane version: package is not compatible with Crossplane version (v1.12.0)

活动 活动显示警告并提示当前版本的 crossplane 不符合配置包要求。

创建配置

crossplane 配置包是包含一个或多个 YAML 文件的 OCI 容器镜像

Important

配置包完全符合 OCI 标准,任何能生成 OCI 镜像的工具都能生成配置包。

强烈建议使用 Crossplane 命令行工具为 Crossplane 软件包的构建提供错误检查和格式化。

使用第三方工具构建软件包时,请阅读Crossplane 软件包规范 了解软件包要求。

配置包需要一个 crossplane.yaml 文件,并可能包括 Composition 和 CompositeResourceDefinition 文件。

crossplane.yaml 文件

要使用 crossplane CLI 构建配置包,请创建一个名为crossplane.yaml 的文件。文件。crossplane.yaml文件定义了配置的要求和名称。

Important
crossplane CLI 只支持名为 crossplane.yaml 的文件。

配置包被引用为meta.pkg.crossplane.iocrossplane API group。

中指定任何其他配置、功能或 Provider。依赖于可选择使用版本选项来要求特定或最小的软件包版本。

您还可以使用crossplane.version选项为该配置定义特定或最低版本。

Note
定义 crossplane对象或所需版本是可选的。
 1$ cat crossplane.yaml
 2apiVersion: meta.pkg.crossplane.io/v1alpha1
 3kind: Configuration
 4metadata:
 5  name: test-configuration
 6spec:
 7  dependsOn:
 8    - provider: xpkg.upbound.io/crossplane-contrib/provider-aws
 9      version: ">=v0.36.0"
10  crossplane:
11    version: ">=v1.12.1-0"

构建 package

被引用crossplane CLI 命令 crossplane xpkg build --package-root=<directory> 创建软件包。

其中 <directory> 是包含 crossplane.yaml 文件和任何 Composition 或 CompositeResourceDefinition YAML 文件的目录。

CLI 会递归搜索目录中的 .yml.yaml 文件,以便将其包含在 packages 中。

Important

您必须忽略任何其他带有 --ignore=<file_list> 的 YAML 文件。例如,crossplane xpkg build --package-root=test-directory --ignore=".tmp/*".

不支持包括claim在内的非 Composition 或 CompositeResourceDefinitions 的 YAML 文件。

默认情况下,crossplane 会创建一个配置名称和软件包内容 SHA-256 哈希值的 .xpkg 文件。

例如 配置名为 的配置。crossplane CLI 会构建一个名为 test-configuration-e8c244f6bf21.xpkg 的软件包。

1apiVersion: meta.pkg.crossplane.io/v1alpha1
2kind: Configuration
3metadata:
4  name: test-configuration
5# Removed for brevity

使用 --output=<filename>.xpkg 选项指定输出文件。

例如,要从名为 test-directory 的目录中构建软件包,并在当前工作目录中生成名为 test-package.xpkg 的软件包,请使用以下命令:

1crossplane xpkg build --package-root=test-directory --output=test-package.xpkg
1ls -1 ./
2test-directory
3test-package.xpkg